#ifndef THREADPOOL_H
#define THREADPOOL_H

#include <pthread.h>
#include <sqlite3.h>
#include <stdint.h>
#include <signal.h>

// 全局变量声明，定义在 main.c 中
extern volatile sig_atomic_t g_shutdown_requested;

#define MAX_PATH_LEN 4096
#define MAX_THREAD_COUNT 32

typedef struct {
    sqlite3 *db;
    const char *directory;
    int64_t min_size;
    int thread_count;
    int force_rehash;
    int cleanup_db;
    int total_files;
    int processed_files;
    int shutdown;
    pthread_mutex_t progress_mutex;
    pthread_mutex_t db_mutex;  // 数据库访问互斥锁
} ScannerContext;

typedef struct {
    ScannerContext *context;
    char file_path[MAX_PATH_LEN];
    int thread_id;
} ThreadTask;

typedef struct ThreadPool ThreadPool;

/**
 * 创建线程池
 * @param thread_count 线程数量
 * @param context 扫描上下文
 * @return 线程池指针，失败返回NULL
 */
ThreadPool* threadpool_create(int thread_count, ScannerContext *context);

/**
 * 提交任务到线程池
 * @param pool 线程池指针
 * @param task 任务指针（线程池会负责释放内存）
 * @return 0表示成功，-1表示失败
 */
int threadpool_submit(ThreadPool *pool, ThreadTask *task);

/**
 * 等待所有任务完成
 * @param pool 线程池指针
 * @param context 扫描上下文
 */
void threadpool_wait(ThreadPool *pool, ScannerContext *context);

/**
 * 销毁线程池
 * @param pool 线程池指针
 */
void threadpool_destroy(ThreadPool *pool);

#endif // THREADPOOL_H
